A virtual machine (VM) is a portion of software that, when executed on appropriate hardware, creates an environment allowing the virtualization of an actual physical computer system. Each VM may function as a self-contained platform, running its own operating system (OS) and software applications (processes). Typically, a hypervisor manages allocation and virtualization of computer resources and performs context switching to cycle between various VMs.
A host machine (e.g., computer or server) is typically enabled to simultaneously run multiple VMs, where each VM may be used by a local or remote client. The host machine allocates a certain amount of the host's resources to each of the VMs. Each VM is then able to use the allocated resources to execute applications, including operating systems known as guest operating systems. The hypervisor virtualizes the underlying hardware of the host machine or emulates hardware devices.
In a virtualized data center, clients may connect to VMs using a remote access protocol, such as Virtual Network Computing (VNC), Remote Desktop Protocol (RDP), Independent Computing Architecture (ICA), or Simple Protocol for Independent Computing Environments (SPICE). The remote access protocol provides client access to a remote machine display and devices (e.g., keyboard, mouse, audio) to allow the user to experience a similar interaction as with a local machine, while offloading most of the intensive CPU and GPU tasks from the VM to the client device.
In a virtualization topology, communication bandwidth between clients and VMs may be limited when communicating over a Wide Area Network (WAN). Bandwidth sometimes defines the net bit rate (also known as peak bit rate, information rate or physical layer useful bit rate), channel capacity, or the maximum throughput of a logical or physical communication path in a digital communication system. In some cases, multiple client devices may share a communication connection to a data center providing VMs communicating with the client devices over the communication connection. These multiple client devices compete for the shared bandwidth on the communication connection.
Currently, different service levels (in terms of bandwidth use of the communication connection) to the different client devices may be provided by solutions such as a traffic control (tc) component or through use of existing facilities in routers and switches implementing the communication connection. These solutions limit and control the bandwidth to provide a specific service level for the multiple client devices in terms of communication bandwidth. However, these solutions have associated costs of performance inefficiency and overhead.